home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / machserver / 1.098 / libc / sun3.md / fpcrtInt.h < prev    next >
C/C++ Source or Header  |  1988-06-19  |  4KB  |  179 lines

  1. /*      @(#)fpcrtdefs.h 1.1 86/09/24 SMI      */
  2.  
  3. /*
  4.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  5.  */
  6.  
  7. #include "DEFSInt.h"
  8.  
  9. #define ENTER(f) .globl f ; f:
  10. #define OBSOLETE(f) ENTER(f)         
  11. /* Obsolete entry points, remove in next release. */
  12. #define RTOBSOLETE(f) RTENTRY(f)     
  13.  
  14. /*
  15. /* typedef enum fp_switch_type {
  16. /*    fp_unspecified, /* Floating point unit not specified yet. */
  17. /*       fp_software,    /* Floating point performed in software. */
  18. /*       fp_skyffp,      /* Floating point performed on Sky FFP. */
  19. /*       fp_mc68881,     /* Floating point performed on Motorola 68881. */
  20. /*       fp_sunfpa       /* Floating point performed on Sun FPA. */
  21. /*       } ;
  22. */
  23. #define FP_UNSPECIFIED    0     
  24. #define FP_SOFTWARE    1     
  25. #define FP_SKYFFP    2     
  26. #define FP_MC68881    3     
  27. #define FP_SUNFPA    4     
  28.  
  29. /*
  30.        Structure of a V... entry point:
  31. Vxxx:  jsr     V_switch:L
  32.        .long   Fxxx    software     gets translated to jmp Fxxx:L
  33.        .long   Sxxx    Sky ffp board    gets translated to jmp Sxxx:L
  34.        .long   Mxxx    Motorola 68881 or emulator
  35.        .long   Wxxx    Sun FPA board    gets translated to jmp Wxxx:L
  36. */
  37.  
  38. #define VOFFSET 2
  39. #define FOFFSET 6
  40. #define SOFFSET 10
  41. #define MOFFSET 14
  42. #define WOFFSET 18
  43.  
  44. #define VECTORED(f) \
  45.     .data    ; \
  46. ENTER(V/**/f) ; \
  47.     jsr    V_switch:L ; \
  48.     .long    F/**/f,S/**/f,M/**/f,W/**/f
  49.  
  50. #define VECTOR(f,g) \
  51.     .data    ; \
  52. OBSOLETE(g) ; \
  53. ENTER(V/**/f) ; \
  54.     jsr    V_switch:L ; \
  55.     .long    F/**/f,S/**/f,M/**/f,W/**/f
  56.  
  57. /*    Entries to convert between C parameter convention and Vxxx convention. */
  58.  
  59. #define CVDTOD(f,g) \
  60.     ENTER(_/**/f) ; \
  61.     moveml     sp@(4),d0/d1 ; \
  62.     jmp     V/**/g/**/d
  63.  
  64. #define CVDDTOD(f,g) \
  65.     ENTER(_/**/f) ; \
  66.     moveml     sp@(4),d0/d1 ; \
  67.     lea    sp@(12),a0 ; \
  68.     jmp     V/**/g/**/d
  69.  
  70. #define VCDTOD(f) \
  71.     ENTER(f) ; \
  72.     moveml    d0/d1,sp@- ; \
  73.         jsr        _C/**/f ; \
  74.         addql   #8,sp ; \
  75.         rts
  76.  
  77. #define VCDDTOD(f) \
  78.     ENTER(f) ; \
  79.     movel    a0@(4),sp@- ; \
  80.     movel    a0@,sp@- ; \
  81.     moveml    d0/d1,sp@- ; \
  82.         jsr        _C/**/f ; \
  83.         addl    #16,sp ; \
  84.         rts
  85.  
  86. #define CVVDTOD(f) \
  87.         ENTER(__v/**/f/**/d) ; \
  88.         moveml  sp@(4),d0/d1 ; \
  89.         jmp     V/**/f/**/d
  90.  
  91. #define CVVDDTOD(f) \
  92.         ENTER(__v/**/f/**/d) ; \
  93.         moveml  sp@(4),d0/d1 ; \
  94.         lea     sp@(12),a0 ; \
  95.         jmp     V/**/f/**/d
  96.  
  97. /*    Entries to convert between Fortran parameter convention and Vxxx convention. */
  98.  
  99. #define VFSTOS(x) \
  100.     ENTER(x) ; \
  101.     movel    d0,sp@- ; \
  102.         pea    sp@ ; \
  103.     jsr        _F/**/x/**/_ ; \
  104.         addql    #8,sp ; \
  105.         rts
  106.  
  107. #define VFSSTOS(x) \
  108.     ENTER(x) ; \
  109.     moveml    d0/d1,sp@- ; \
  110.     pea    sp@(4) ; \
  111.     pea    sp@(4) ; \
  112.         jsr        _F/**/x/**/_ ; \
  113.         addl    #16,sp ; \
  114.         rts
  115.  
  116. #define VFDTOD(x) \
  117.     ENTER(x) ; \
  118.     moveml    d0/d1,sp@- ; \
  119.         pea    sp@ ; \
  120.     jsr        _F/**/x/**/_ ; \
  121.         addl    #12,sp ; \
  122.         rts
  123.  
  124. #define VFDDTOD(x) \
  125.     ENTER(x) ; \
  126.     moveml    d0/d1,sp@- ; \
  127.     pea    a0@ ; \
  128.     pea    sp@(4) ; \
  129.         jsr        _F/**/x/**/_ ; \
  130.         addl    #16,sp ; \
  131.         rts
  132.  
  133. /*    Floating point condition codes, as in movew    #FLT,cc      */
  134.  
  135. #define FEQ    4    /* Z bit */
  136. #define    FLT    25    /* XNC bits */
  137. #define FGT    0    /* no bits */
  138. #define    FUN    2    /* V bit */
  139.  
  140. /*    Floating point modes and status. */
  141.  
  142. /*
  143.  *      Rounding Direction
  144.  */
  145.  
  146. #define ROUNDMASK ~0x30
  147.  
  148. #define RNEAREST   0
  149. #define RZERO   0x10
  150. #define RMINUS  0x20
  151. #define RPLUS   0x30
  152.  
  153. /*
  154.  *      Rounding Precision
  155.  */
  156.  
  157. #define ROUNDTODOUBLE 0x80    /* 68881 rounding precision corresponding to F/S/W */
  158.  
  159. /* 
  160.  *    Jump Table Equates - all odd and negative
  161.  */
  162.  
  163. #define RETURNX     -1    /* Return first argument */
  164. #define RETURNY        -3    /* Return second argument */
  165. #define    RETURNINVALID    -5    /* Return a quiet nan and set errno */
  166. #define    RETURN1        -7    /* Return +1.0. */
  167. #define    RETURNINFORZERO    -9    /* Return +inf for +inf, +0 for -inf. */
  168.  
  169. /*
  170.  *    Context save/restore info.
  171.  */
  172.  
  173. #define FPSAVESIZE    256    /* Block for stacking state of current floating point device. */
  174.  
  175. /*    68020 cache clear call 
  176.  */
  177.  
  178. #define CLEARCACHE    trap    #2
  179.